// 判断字符传是否on开头，并且on后的首字母不是小写字母
const isOn = (key: string) => /^on[^a-z]/.test(key);
// 测试用例
console.log(isOn('onChange')); // true
console.log(isOn('onchange')); // false

// 判断字符串是不是以onUpdate开头
const isModelListener = (key: string) => key.startsWith('onUpdate');

// 测试用例
console.log(isModelListener('onUpdate:change')); // true
console.log(isModelListener('1onUpdate:change')); // false

// 移除数组的一项
const onceRemoveArr = (arr: any[], el) => {
  const i = arr.indexOf(el);
  if (i > -1) {
    arr.splice(i, 1);
  }
};
// 测试用例
const testArr = [1, 2, 3];
onceRemoveArr(testArr, 3);
console.log(testArr); // [1, 2]

// hasOwn 是不是自己本身拥有的属性
const hasOwnProperty = Object.prototype.hasOwnProperty;
const hasOwn = (val: any, key: any) => hasOwnProperty.call(val, key);

console.log(hasOwn({ __proto__: { a: 1 } }, 'a')); // false
console.log(hasOwn({ a: undefined }, 'a')); // true
